// 引入所需的头文件
#include "httplib.hpp"
#include "searcher.hpp" 

// 定义输入文件的路径和Web服务器的根目录
const std::string input = "data/raw_html/raw.txt";
const std::string root_path = "./wwwroot";

// 主函数，程序的入口点
int main() {
    // 创建Searcher类的实例并初始化
    ns_searcher::Searcher search;
    search.InitSearcher(input);

    // 创建httplib::Server类的实例，用于处理HTTP请求
    httplib::Server svr;
    // 设置服务器的根目录为root_path
    svr.set_base_dir(root_path.c_str());
    // 为服务器添加一个GET请求的处理函数
    svr.Get("/s", [&search](const httplib::Request &req, httplib::Response &rsp) {
        // 检查请求中是否包含搜索关键字参数"word"
        if (!req.has_param("word")) {
            // 如果没有搜索关键字，返回错误信息
            rsp.set_content("必须要有搜索关键字!", "text/plain; charset=utf-8");
            return;
        }
        // 从请求中获取搜索关键字
        std::string word = req.get_param_value("word");
        // 记录日志，输出用户搜索的关键字
        LOG(NORMAL, "用户搜索的: " + word);
        // 定义用于存储搜索结果的字符串
        std::string json_string;
        // 调用search实例的Search方法进行搜索，并将结果存储在json_string中
        search.Search(word, &json_string);

        // 设置响应内容为搜索结果，并指定内容类型为JSON
        rsp.set_content(json_string, "application/json");
    });

    // 记录日志，表示服务器启动成功
    LOG(NORMAL, "服务器启动成功...");
    // 服务器开始监听所有IP的8081端口
    svr.listen("0.0.0.0", 8081);
    // 返回0，表示程序正常结束
    return 0;
}